package br.com.lsi.sistemasdevendas.dao;

import br.com.lsi.sistemasdevendas.interfaces.InterfaceFuncionario;
import br.com.lsi.sistemasdevendas.model.Funcionario;
import br.com.lsi.sistemasdevendas.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author lucia
 */
public class FuncionarioDao implements InterfaceFuncionario {

    private Connection connection;

    public FuncionarioDao() {

    }

    public void salvar(Funcionario funcionario) {

        try {
            connection = ConnectionFactory.getConnection();

            // definir o comando SQL
            String sql = "INSERT INTO Funcionario (nome, cpf, telefone,endereco, cidade, cep,bairro, uf) VALUES (?,?,?,?,?,?,?,?)";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);
            // preencher statement
            st.setString(1, funcionario.getNome());
            st.setString(2, funcionario.getCpf());
            st.setString(3, funcionario.getTelefone());
            st.setString(4, funcionario.getEndereco());
            st.setString(5, funcionario.getCidade());
            st.setString(6, funcionario.getCep());
            st.setString(7, funcionario.getBairro());
            st.setString(8, funcionario.getUf());

            // executar comando
            st.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();

        } finally {

            try {
                connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(FuncionarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

    public void alterar(Funcionario funcionario) {

        try {
            connection = ConnectionFactory.getConnection();

            String sql = "UPDATE Funcionario SET nome = ?, cpf = ?, telefone = ?,endereco = ?, cidade = ?, cep = ?,bairro = ?, uf = ? WHERE idFuncionario = ?";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);
            // preencher statement

            st.setString(1, funcionario.getNome());
            st.setString(2, funcionario.getCpf());
            st.setString(3, funcionario.getTelefone());
            st.setString(4, funcionario.getEndereco());
            st.setString(5, funcionario.getCidade());
            st.setString(6, funcionario.getCep());
            st.setString(7, funcionario.getBairro());
            st.setString(8, funcionario.getUf());
            st.setInt(9, funcionario.getIdFuncionario());

            // executar comando
            st.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            try {
                connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

    public void excluir(Funcionario funcionario) {

        try {

            connection = ConnectionFactory.getConnection();

            // definir o comando SQL
            String sql = "DELETE FROM Funcionario WHERE idFuncionario = ?";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);
            // preencher statement
            st.setInt(1, funcionario.getIdFuncionario());
            // executar comando
            st.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            try {
                connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

    public List<Funcionario> listar() {

        List<Funcionario> lista = new ArrayList<Funcionario>();

        try {
            connection = ConnectionFactory.getConnection();
            // definir o comando SQL
            String sql = "SELECT * FROM funcionario";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);

            // executar comando
            ResultSet rs = st.executeQuery();

            while (rs.next()) {

                Funcionario funcionario = new Funcionario();

                funcionario.setNome(rs.getString("nome"));
                funcionario.setCpf(rs.getString("cpf"));
                funcionario.setTelefone(rs.getString("telefone"));
                funcionario.setEndereco(rs.getString("endereco"));
                funcionario.setCidade(rs.getString("cidade"));
                funcionario.setCep(rs.getString("cep"));
                funcionario.setBairro(rs.getString("bairro"));
                funcionario.setUf(rs.getString("uf"));
                funcionario.setIdFuncionario(rs.getInt("idFuncionario"));

                lista.add(funcionario);
            }

            return lista;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

    public List<Funcionario> getLista() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}
